001 /* EVolve - an Extensible Software Visualization Framework 002 * Copyright (C) 2001-2002 Qin Wang 003 * 004 * This library is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU Library General Public 006 * License as published by the Free Software Foundation; either 007 * version 2 of the License, or (at your option) any later version. 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Library General Public License for more details. 013 * 014 * You should have received a copy of the GNU Library General Public 015 * License along with this library; if not, write to the 016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 017 * Boston, MA 02111-1307, USA. 018 */ 019 020 /* 021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/ 022 */ 023 024 package EVolve; 025 026 import EVolve.visualization.*; 027 import EVolve.util.predefinedutils.VisualizationSerializer; 028 import EVolve.util.settings.*; 029 import EVolve.util.overlappers.OverlapVisualization; 030 import EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar; 031 import EVolve.data.DataManager; 032 import java.awt.*; 033 import java.awt.Dimension; 034 import java.awt.event.*; 035 import java.util.*; 036 import java.io.*; 037 import javax.swing.*; 038 import javax.swing.event.*; 039 040 public class UIManager { 041 private JFrame frame; 042 private JDesktopPane desktop; 043 private boolean doNotRemoveWindow; 044 045 private ArrayList windowList; 046 047 private JPanel panelStatus; 048 private JLabel labelStatus; 049 050 private JMenuBar menuBar; 051 052 private JMenu menuFile; 053 private JMenuItem itemLoad; 054 private JMenuItem itemAddDataSource; 055 private JMenuItem itemExit; 056 057 private JMenu menuVisualization; 058 private JMenu menuNew; 059 private JMenuItem[] itemNew; 060 private JMenuItem itemVisualize; 061 private JMenuItem itemPredefinedVisualize; 062 063 private JMenu menuWindow; 064 private JMenuItem itemArrange; 065 066 /** added functions */ 067 private JMenu menuTool; 068 069 private JMenu menuBatch; 070 private JMenuItem itemBuildBatch; 071 private JMenuItem itemRunBatch; 072 073 private JMenu menuPredefinedViz; 074 private JMenuItem itemReadSetting; 075 private JMenuItem itemSaveSetting; 076 private JMenu menuUseSetting; 077 078 private JMenu menuOverlapViz; 079 private JMenuItem itemLinkViz; 080 081 private JMenu menuSelection; 082 private JMenuItem itemCurrentSelection; 083 private JMenuItem itemAutoSelection; 084 085 private JRadioButtonMenuItem[] itemSettings; 086 private JMenuItem itemSynOverlap; 087 private JMenuItem itemAsynOverlap; 088 089 private JMenuItem itemEnablePhaseDetector; 090 091 private JMenu menuOptions; 092 private JMenuItem itemPath; 093 private JMenuItem itemInfo; 094 095 private JMenu menuHelp; 096 private JMenuItem itemAbout; 097 098 private JDialog dialog; 099 private JComboBox comboColumn; 100 private JList listVisualization; 101 private DefaultListModel model; 102 103 private JDialog dialogAbout; 104 105 private String lastConfigDir, lastDataDir, lastResultDir; 106 107 private JToolBar toolbar; 108 private EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar toolbarPhaseDetector; 109 private JButton tblVizNow, tblConfigure; 110 private JComboBox tblComboDataSource; 111 112 public UIManager() { 113 try { 114 javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName()); 115 } catch (Exception e) {} 116 117 frame = new JFrame(Scene.VERSION); 118 119 ImageIcon icon = new ImageIcon(this.getClass().getResource("img/logo_icon.gif")); 120 frame.setIconImage(icon.getImage()); 121 122 frame.addWindowListener(new WindowAdapter() { 123 public void windowClosing(WindowEvent e) { 124 System.exit(0); 125 } 126 }); 127 128 frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); 129 130 windowList = new ArrayList(); 131 132 createMenu(); 133 134 createToolBar(); 135 frame.getContentPane().add(toolbar, BorderLayout.NORTH); 136 137 138 desktop = new JDesktopPane(); 139 desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); 140 frame.getContentPane().add(desktop, BorderLayout.CENTER); 141 142 panelStatus = new JPanel(new BorderLayout()); 143 panelStatus.setBackground(new Color(240, 240, 240)); 144 panelStatus.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLoweredBevelBorder(), BorderFactory.createLineBorder(new Color(240, 240, 240), 2))); 145 frame.getContentPane().add(panelStatus, BorderLayout.SOUTH); 146 147 labelStatus = new JLabel(Scene.VERSION); 148 panelStatus.add(labelStatus, BorderLayout.WEST); 149 150 frame.setVisible(true); 151 152 createDialog(); 153 createAbout(); 154 doNotRemoveWindow = false; 155 156 lastDataDir = ""; 157 lastConfigDir = ""; 158 lastResultDir=""; 159 } 160 161 private void createMenu() { 162 menuBar = new JMenuBar(); 163 frame.setJMenuBar(menuBar); 164 165 menuFile = new JMenu("File"); 166 menuFile.setMnemonic(KeyEvent.VK_F); 167 menuBar.add(menuFile); 168 169 itemLoad = new JMenuItem("Load Data..."); 170 itemLoad.setMnemonic(KeyEvent.VK_L); 171 itemLoad.addActionListener(new ActionListener() { 172 public void actionPerformed(ActionEvent e) { 173 Scene.loadDataSource(); 174 for (int i = 0; i<Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber(); i++) { 175 Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVizByIndex(i).setTranslated(false); 176 } 177 } 178 }); 179 menuFile.add(itemLoad); 180 menuFile.addSeparator(); 181 182 itemAddDataSource = new JMenuItem("Add Data Source..."); 183 itemAddDataSource.setMnemonic(KeyEvent.VK_A); 184 itemAddDataSource.addActionListener(new ActionListener() { 185 public void actionPerformed(ActionEvent e) { 186 String name = JOptionPane.showInputDialog(getDesktop(),"Name of the new data source:"); 187 if (name != null) { 188 Scene.getDataSourceManager().addDataSource(name); 189 updateDatasourceCombo(); 190 } 191 } 192 }); 193 menuFile.add(itemAddDataSource); 194 menuFile.addSeparator(); 195 196 itemExit = new JMenuItem("Exit"); 197 itemExit.setMnemonic(KeyEvent.VK_X); 198 itemExit.addActionListener(new ActionListener() { 199 public void actionPerformed(ActionEvent e) { 200 System.exit(0); 201 } 202 }); 203 menuFile.add(itemExit); 204 205 menuVisualization = new JMenu("Visualization"); 206 menuVisualization.setMnemonic(KeyEvent.VK_V); 207 menuBar.add(menuVisualization); 208 209 menuNew = new JMenu("New"); 210 menuNew.setMnemonic(KeyEvent.VK_N); 211 menuVisualization.add(menuNew); 212 213 itemPredefinedVisualize = new JMenuItem("Predefined Visualize"); 214 itemPredefinedVisualize.setMnemonic(KeyEvent.VK_P); 215 itemPredefinedVisualize.addActionListener(new ActionListener() { 216 public void actionPerformed(ActionEvent e) { 217 Scene.getToolsManager().getPredefinedVisualizationRunner().runPredefinedVisualization(); 218 } 219 }); 220 menuVisualization.add(itemPredefinedVisualize); 221 222 itemVisualize = new JMenuItem("Visualize..."); 223 itemVisualize.setMnemonic(KeyEvent.VK_V); 224 itemVisualize.addActionListener(new ActionListener() { 225 public void actionPerformed(ActionEvent e) { 226 Scene.getVisualizationManager().preVisualize(); 227 } 228 }); 229 menuVisualization.add(itemVisualize); 230 231 menuWindow = new JMenu("Window"); 232 menuWindow.setMnemonic(KeyEvent.VK_W); 233 menuBar.add(menuWindow); 234 235 itemArrange = new JMenuItem("Arrange..."); 236 itemArrange.setMnemonic(KeyEvent.VK_A); 237 itemArrange.addActionListener(new ActionListener() { 238 public void actionPerformed(ActionEvent e) { 239 arrange(); 240 } 241 }); 242 menuWindow.add(itemArrange); 243 244 menuTool = new JMenu("Tools"); 245 menuTool.setMnemonic(KeyEvent.VK_T); 246 menuBar.add(menuTool); 247 248 itemBuildBatch = new JMenuItem("Build Batch"); 249 itemBuildBatch.setMnemonic(KeyEvent.VK_B); 250 itemBuildBatch.addActionListener(new ActionListener() { 251 public void actionPerformed(ActionEvent e) { 252 Scene.getToolsManager().getBatchRunner().showWindow(); 253 } 254 }); 255 itemRunBatch = new JMenuItem("Run Batch"); 256 itemRunBatch.setMnemonic(KeyEvent.VK_R); 257 itemRunBatch.addActionListener(new ActionListener() { 258 public void actionPerformed(ActionEvent e) { 259 if (Scene.getToolsManager().getBatchRunner() != null) 260 Scene.getToolsManager().getBatchRunner().runBatch(); 261 } 262 }); 263 menuBatch = new JMenu("Auto Generate Visualizations"); 264 menuBatch.setMnemonic(KeyEvent.VK_A); 265 menuBatch.add(itemBuildBatch); 266 menuBatch.add(itemRunBatch); 267 268 itemReadSetting = new JMenuItem("Load Predefined Viz Setting"); 269 itemReadSetting.setMnemonic(KeyEvent.VK_L); 270 itemReadSetting.addActionListener(new ActionListener() { 271 public void actionPerformed(ActionEvent e) { 272 VisualizationSerializer.v().loadConfiguration(); 273 } 274 }); 275 itemSaveSetting = new JMenuItem("Save Current Viz Setting"); 276 itemSaveSetting.setMnemonic(KeyEvent.VK_S); 277 itemSaveSetting.addActionListener(new ActionListener() { 278 public void actionPerformed(ActionEvent e) { 279 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList(); 280 if (vizList.size() == 0) return; 281 282 VisualizationSerializer.v().showSavingDialog(); 283 } 284 }); 285 menuUseSetting = new JMenu("Choose Predefined Viz Setting"); 286 menuUseSetting.setMnemonic(KeyEvent.VK_C); 287 menuPredefinedViz = new JMenu("Predefined Visualization"); 288 menuPredefinedViz.setMnemonic(KeyEvent.VK_P); 289 menuPredefinedViz.add(itemReadSetting); 290 menuPredefinedViz.add(itemSaveSetting); 291 menuPredefinedViz.add(menuUseSetting); 292 293 294 itemLinkViz = new JMenuItem("Unify Visualizations..."); 295 itemLinkViz.setMnemonic(KeyEvent.VK_U); 296 itemLinkViz.addActionListener(new ActionListener() { 297 public void actionPerformed(ActionEvent e) { 298 Scene.getToolsManager().getLinkedVisualizationRunner().showWindow(); 299 } 300 }); 301 302 itemSynOverlap = new JMenuItem("Overlap Visualizations..."); 303 itemSynOverlap.setMnemonic(KeyEvent.VK_O); 304 itemSynOverlap.addActionListener(new ActionListener() { 305 public void actionPerformed(ActionEvent e) { 306 Scene.getToolsManager().getOverlapVisualizationRunner().getSynOverlapper().showWindow(); 307 } 308 }); 309 itemAsynOverlap = new JMenuItem("Auto Overlap Visualizations ..."); 310 itemAsynOverlap.setMnemonic(KeyEvent.VK_A); 311 itemAsynOverlap.addActionListener(new ActionListener() { 312 public void actionPerformed(ActionEvent e) { 313 Scene.getToolsManager().getOverlapVisualizationRunner().getAsynOverlapper().showWindow(); 314 } 315 }); 316 menuOverlapViz = new JMenu("Overlap Visualizations"); 317 menuOverlapViz.setMnemonic(KeyEvent.VK_O); 318 menuOverlapViz.add(itemSynOverlap); 319 menuOverlapViz.add(itemAsynOverlap); 320 321 itemEnablePhaseDetector = new JMenuItem("Enable Phase Detector"); 322 itemEnablePhaseDetector.setMnemonic(KeyEvent.VK_E); 323 itemEnablePhaseDetector.addActionListener(new ActionListener() { 324 public void actionPerformed(ActionEvent e) { 325 toolbarPhaseDetector.setVisible(true); 326 refreshToolBar(); 327 Scene.getVisualizationManager().enablePhaseDetector(true); 328 } 329 }); 330 331 332 menuSelection = new JMenu("Selection"); 333 menuSelection.setMnemonic(KeyEvent.VK_S); 334 menuSelection.addMenuListener(new MenuListener() { 335 public void menuSelected(MenuEvent e) { 336 menuSelection.removeAll(); 337 createSelectionMenuItem(); 338 } 339 public void menuDeselected(MenuEvent e) { 340 341 } 342 public void menuCanceled(MenuEvent e) { 343 344 } 345 }); 346 menuBar.add(menuSelection); 347 348 menuTool.add(menuBatch); 349 menuTool.add(menuPredefinedViz); 350 menuTool.add(menuOverlapViz); 351 menuTool.add(itemLinkViz); 352 menuTool.add(itemEnablePhaseDetector); 353 354 menuOptions = new JMenu("Options"); 355 menuOptions.setMnemonic(KeyEvent.VK_O); 356 menuBar.add(menuOptions); 357 358 itemPath = new JMenuItem("Setting Path..."); 359 itemPath.setMnemonic(KeyEvent.VK_S); 360 itemPath.addActionListener(new ActionListener() { 361 public void actionPerformed(ActionEvent e) { 362 SceneSetting.v().showSettingDialog(); 363 } 364 }); 365 366 itemInfo = new JMenuItem("View Current Setting"); 367 itemInfo.setMnemonic(KeyEvent.VK_V); 368 itemInfo.addActionListener(new ActionListener() { 369 public void actionPerformed(ActionEvent e) { 370 SceneSetting.v().showCurrentSetting(); 371 } 372 }); 373 menuOptions.add(itemPath); 374 menuOptions.add(itemInfo); 375 376 menuHelp = new JMenu("Help"); 377 menuHelp.setMnemonic(KeyEvent.VK_H); 378 menuBar.add(menuHelp); 379 380 itemAbout = new JMenuItem("About EVolve..."); 381 itemAbout.setMnemonic(KeyEvent.VK_A); 382 itemAbout.addActionListener(new ActionListener() { 383 public void actionPerformed(ActionEvent e) { 384 showDialog(dialogAbout, 300, 150); 385 } 386 }); 387 menuHelp.add(itemAbout); 388 } 389 390 private void createToolBar() { 391 toolbar = new JToolBar(); 392 toolbar.setPreferredSize(new java.awt.Dimension(frame.getWidth(),31)); 393 FlowLayout layout = new FlowLayout(FlowLayout.LEFT,2,0); 394 layout.layoutContainer(toolbar); 395 toolbar.setLayout(layout); 396 toolbar.setFloatable(false); 397 toolbar.setRollover(true); 398 toolbar.setBackground(new Color(207,207,207)); 399 400 tblComboDataSource = new JComboBox(); 401 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList(); 402 for (int i=0; i<dmList.size(); i++) { 403 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName()); 404 } 405 tblComboDataSource.addActionListener(new ActionListener() { 406 public void actionPerformed(ActionEvent e) { 407 DataSourceManager dsm = Scene.getDataSourceManager(); 408 dsm.switchDataSource(tblComboDataSource.getSelectedIndex()); 409 if (Scene.getDataManager().isDataLoaded() == false) { 410 disableFunctionMenus(); 411 } else { 412 enableMenu(); 413 } 414 } 415 }); 416 417 tblConfigure = new JButton(new ImageIcon(Scene.getGifURL("config.gif"))); 418 tblConfigure.setToolTipText("Configure Current Visualization"); 419 tblConfigure.addActionListener(new ActionListener() { 420 public void actionPerformed(ActionEvent e) { 421 Visualization visual = Scene.getVisualizationManager().getActiveVisualization(); 422 if (visual != null) visual.configure(); 423 } 424 }); 425 tblConfigure.setPreferredSize(new java.awt.Dimension(28,28)); 426 427 tblVizNow = new JButton(new ImageIcon(Scene.getGifURL("vizNow.gif"))); 428 tblVizNow.setToolTipText("Visualize Current Visualization Now"); 429 tblVizNow.addActionListener(new ActionListener() { 430 public void actionPerformed(ActionEvent e) { 431 Scene.getVisualizationManager().visualizeNow(); 432 } 433 }); 434 tblVizNow.setPreferredSize(new java.awt.Dimension(28,28)); 435 436 toolbarPhaseDetector = new EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar(); 437 toolbarPhaseDetector.setVisible(false); 438 439 toolbar.add(new JLabel("Data Source: ")); 440 toolbar.add(tblComboDataSource); 441 toolbar.add(tblConfigure); 442 toolbar.add(tblVizNow); 443 toolbar.add(toolbarPhaseDetector); 444 445 toolbar.addContainerListener(new ContainerAdapter() { 446 public void componentAdded(ContainerEvent e) { 447 refreshToolBar(); 448 } 449 450 public void componentRemoved(ContainerEvent e) { 451 refreshToolBar(); 452 } 453 }); 454 } 455 456 private void createDialog() { 457 dialog = new JDialog(frame, "Select Windows", true); 458 model = new DefaultListModel(); 459 listVisualization = new JList(model); 460 listVisualization.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 461 462 JPanel panelColumn = new JPanel(new FlowLayout()); 463 dialog.getContentPane().add(panelColumn, BorderLayout.NORTH); 464 465 panelColumn.add(new JLabel("Number of column: ")); 466 467 comboColumn = new JComboBox(); 468 comboColumn.addItem(" 1 "); 469 comboColumn.addItem(" 2 "); 470 comboColumn.addItem(" 3 "); 471 comboColumn.addItem(" 4 "); 472 panelColumn.add(comboColumn); 473 474 JScrollPane scrollPane = new JScrollPane(listVisualization); 475 scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Choose windows")); 476 dialog.getContentPane().add(scrollPane, BorderLayout.CENTER); 477 478 JPanel panelButton = new JPanel(new FlowLayout()); 479 dialog.getContentPane().add(panelButton, BorderLayout.SOUTH); 480 481 JButton buttonApply = new JButton("Apply"); 482 buttonApply.addActionListener(new ActionListener() { 483 public void actionPerformed(ActionEvent e) { 484 dialogApply(); 485 } 486 }); 487 panelButton.add(buttonApply); 488 489 JButton buttonCancel = new JButton("Cancel"); 490 buttonCancel.addActionListener(new ActionListener() { 491 public void actionPerformed(ActionEvent e) { 492 dialogCancel(); 493 } 494 }); 495 panelButton.add(buttonCancel); 496 } 497 498 public void createAbout() { 499 dialogAbout = new JDialog(frame, "About EVolve", true); 500 dialogAbout.getContentPane().setBackground(new Color(240, 240, 240)); 501 dialogAbout.getContentPane().add(new JLabel(new ImageIcon(this.getClass().getResource("img/logo_about.gif"))), BorderLayout.CENTER); 502 } 503 504 public void init() { 505 if (doNotRemoveWindow) return; 506 /*windowList.clear(); 507 JInternalFrame[] frame = desktop.getAllFrames(); 508 for (int i = 0; i < frame.length; i++) { 509 frame[i].dispose(); 510 }*/ 511 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList(); 512 ArrayList newWindowList = new ArrayList(); 513 int datasourceId = Scene.getDataSourceManager().getCurrentDataSourceId(); 514 for (int i=0; i<vizList.size(); i++) { 515 Visualization visual = (Visualization)vizList.get(i); 516 EVolve.Window window = visual.getWindow(); 517 if (visual.getDataSourceId() == datasourceId) 518 window.dispose(); 519 else 520 newWindowList.add(window); 521 } 522 windowList = newWindowList; 523 524 disableFunctionMenus(); 525 menuWindow.setEnabled(false); 526 } 527 528 public JFrame getFrame() { 529 return frame; 530 } 531 532 public void setStatus(String status) { 533 labelStatus.setText(status); 534 } 535 536 public void enableMenu() { 537 menuNew.removeAll(); 538 String[] name = Scene.getVisualizationManager().getFactoryName(); 539 itemNew = new JMenuItem[name.length]; 540 for (int i = 0; i < itemNew.length; i++) { 541 itemNew[i] = new JMenuItem(((char)(i + 65)) + " - " + name[i]); 542 itemNew[i].setMnemonic(i + 65); 543 itemNew[i].addActionListener(new ActionListener() { 544 public void actionPerformed(ActionEvent e) { 545 Scene.getVisualizationManager().newVisualization(((JMenuItem)(e.getSource())).getText().substring(4)); 546 menuSelection.removeAll(); 547 createSelectionMenuItem(); 548 } 549 }); 550 menuNew.add(itemNew[i]); 551 } 552 553 menuVisualization.setEnabled(true); 554 menuWindow.setEnabled(true); 555 menuSelection.setEnabled(true); 556 557 //tblVizNow.setEnabled(true); 558 //tblConfigure.setEnabled(true); 559 updateToolbarButtons(); 560 } 561 562 public void enableFileMenus() { 563 menuFile.setEnabled(true); 564 menuSelection.setEnabled(true); 565 menuTool.setEnabled(true); 566 } 567 568 public void showDialog(JDialog dialog, int width, int height) { 569 dialog.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2, width, height); 570 dialog.setVisible(true); 571 } 572 573 public void addVisualization(Visualization visualization) { 574 Window newWindow = new Window(visualization); 575 newWindow.setBounds(0, 0, desktop.getSize().width, desktop.getSize().height); 576 newWindow.setVisible(true); 577 578 desktop.add(newWindow); 579 newWindow.addInternalFrameListener(new InternalFrameAdapter() { 580 public void internalFrameActivated(InternalFrameEvent e) { 581 refreshToolBar(); 582 } 583 584 public void internalFrameClosed(InternalFrameEvent e) { 585 refreshToolBar(); 586 } 587 588 public void internalFrameOpened(InternalFrameEvent e) { 589 refreshToolBar(); 590 } 591 }); 592 try { 593 newWindow.setSelected(true); 594 } catch (Exception e) {}; 595 596 windowList.add(newWindow); 597 598 visualization.setWindow(newWindow); 599 updateToolbarButtons(); 600 refreshToolBar(); 601 } 602 603 public Window addOverlappedVisualization(OverlapVisualization visual) { 604 Window newWindow = new Window(visual); 605 newWindow.setBounds(0, 0, desktop.getSize().width/2, desktop.getSize().height/2); 606 newWindow.setVisible(true); 607 608 desktop.add(newWindow); 609 try { 610 newWindow.setSelected(true); 611 } catch (Exception e) {}; 612 613 windowList.add(newWindow); 614 return newWindow; 615 } 616 617 public void removeWindow(Window window) { 618 window.dispose(); 619 Scene.getVisualizationManager().removeVisualization(window.getVisualization()); 620 windowList.remove(window); 621 updateToolbarButtons(); 622 } 623 624 private void arrange() { 625 int selectedCounter = 0; 626 for (int i = 0; i < windowList.size(); i++) { 627 if (!((Window)(windowList.get(i))).isIcon()) { 628 selectedCounter++; 629 } 630 } 631 632 int[] selected = new int[selectedCounter]; 633 selectedCounter = 0; 634 635 model.removeAllElements(); 636 637 for (int i = 0; i < windowList.size(); i++) { 638 model.addElement(((Window)(windowList.get(i))).getTitle()); 639 if (!((Window)(windowList.get(i))).isIcon()) { 640 selected[selectedCounter] = i; 641 selectedCounter++; 642 } 643 } 644 645 listVisualization.setSelectedIndices(selected); 646 647 showDialog(dialog, 270, 360); 648 } 649 650 private void dialogApply() { 651 dialog.setVisible(false); 652 653 for (int i = 0; i < windowList.size(); i++) { 654 try { 655 ((Window)(windowList.get(i))).setIcon(true); 656 } catch (Exception e) {} 657 } 658 659 int[] selected = listVisualization.getSelectedIndices(); 660 661 if (selected.length != 0) { 662 boolean[] located = new boolean[selected.length]; 663 for (int i = 0; i < located.length; i++) { 664 located[i] = false; 665 } 666 667 int columnNumber = comboColumn.getSelectedIndex() + 1; 668 int width = desktop.getWidth() / columnNumber; 669 int height = desktop.getHeight() / ((selected.length - 1) / columnNumber + 1); 670 671 for (int i = 0; i < selected.length; i++) { 672 int x = (i % columnNumber) * width; 673 int y = (i / columnNumber) * height; 674 675 int minDistance = Integer.MAX_VALUE; 676 int minIndex = -1; 677 678 for (int j = 0; j < selected.length; j++) { 679 if (!located[j]) { 680 int distance = (((Window)(windowList.get(selected[j]))).getX() - x) * (((Window)(windowList.get(selected[j]))).getX() - x) + (((Window)(windowList.get(selected[j]))).getY() - y) * (((Window)(windowList.get(selected[j]))).getY() - y); 681 if (distance < minDistance) { 682 minDistance = distance; 683 minIndex = j; 684 } 685 } 686 } 687 688 try { 689 ((Window)(windowList.get(selected[minIndex]))).setIcon(false); 690 ((Window)(windowList.get(selected[minIndex]))).setBounds(x, y, width, height); 691 located[minIndex] = true; 692 } catch (Exception e) {} 693 } 694 } 695 } 696 697 private void dialogCancel() { 698 dialog.setVisible(false); 699 } 700 701 public void refreshMenu(String filename,String configureName) { 702 int selIndex = 0; 703 if (Scene.getToolsManager().getPredefinedVisualizationRunner().containsConfigure(configureName)) { 704 Scene.showErrorMessage("Visualization configuration for this name already exists!"); 705 return; 706 } 707 708 Scene.getToolsManager().getPredefinedVisualizationRunner().addPredefinedVisualization(filename,configureName); 709 menuUseSetting.removeAll(); 710 itemSettings = new JRadioButtonMenuItem[Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber()]; 711 for (int i = 0; i < itemSettings.length; i++) { 712 String addConfigureName = Scene.getToolsManager().getPredefinedVisualizationRunner().getConfigureName(i); 713 if (addConfigureName.equals(configureName)) { 714 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(i); 715 selIndex = i; 716 } 717 itemSettings[i] = new JRadioButtonMenuItem(addConfigureName); 718 itemSettings[i].addActionListener(new ActionListener() { 719 public void actionPerformed(ActionEvent e) { 720 for (int i=0; i<itemSettings.length; i++) { 721 if (itemSettings[i].isSelected()) itemSettings[i].setSelected(false); 722 } 723 int selected = Scene.getToolsManager().getPredefinedVisualizationRunner().getIdFromName( 724 ((JRadioButtonMenuItem)(e.getSource())).getText()); 725 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(selected); 726 itemSettings[selected].setSelected(true); 727 } 728 }); 729 menuUseSetting.add(itemSettings[i]); 730 } 731 itemSettings[selIndex].setSelected(true); 732 } 733 734 public void clearWindowsList() { 735 windowList.clear(); 736 } 737 738 public void setDoNotRemoveWindow(boolean newValue) { 739 doNotRemoveWindow = newValue; 740 } 741 742 public JDesktopPane getDesktop() { 743 return desktop; 744 } 745 746 public String getLastDataDir() { 747 return lastDataDir; 748 } 749 750 public void setLastDataDir(String dir) { 751 lastDataDir = dir; 752 } 753 754 public String getLastConfigDir() { 755 return lastConfigDir; 756 } 757 758 public void setLastConfigDir(String dir) { 759 lastConfigDir = dir; 760 } 761 762 public String getLastResultDir() { 763 return lastResultDir; 764 } 765 766 public void setLastResultDir(String dir) { 767 lastResultDir = dir; 768 } 769 770 public void disableFunctionMenus() { 771 menuVisualization.setEnabled(false); 772 menuSelection.setEnabled(false); 773 tblVizNow.setEnabled(false); 774 tblConfigure.setEnabled(false); 775 } 776 777 public void disableFileMenus() { 778 menuFile.setEnabled(false); 779 menuSelection.setEnabled(false); 780 menuTool.setEnabled(false); 781 } 782 783 public void loadSelection() { 784 RandomAccessFile selectionFile; 785 JFileChooser fc = new JFileChooser(getLastConfigDir()); 786 String filename = null; 787 788 if(fc.showOpenDialog(frame) != JFileChooser.APPROVE_OPTION) return; 789 790 try { 791 filename = fc.getSelectedFile().getPath(); 792 setLastConfigDir(filename); 793 selectionFile = new RandomAccessFile(filename, "r"); 794 795 //String version = selectionFile.readLine().trim(); 796 //if (!version.equals(Scene.VERSION)) throw (new IOException()); 797 //selectionName = selectionFile.readLine().trim(); 798 799 Scene.getFilter().loadSelection(selectionFile); 800 801 } catch (Exception e) { 802 Scene.showErrorMessage("Invalid selection file format."); 803 return; 804 } 805 } 806 807 private void createSelectionMenuItem() { 808 Visualization visual = Scene.getVisualizationManager().getActiveVisualization(); 809 JMenuItem[] tempMenus = null; 810 811 if (visual!=null) tempMenus = visual.createSelectionMenuItem(); 812 813 if (tempMenus != null) { 814 for (int i=0; i<tempMenus.length; i++) 815 menuSelection.add(tempMenus[i]); 816 } 817 818 itemCurrentSelection = new JMenuItem("Current Selections..."); 819 itemCurrentSelection.setMnemonic(KeyEvent.VK_C); 820 itemCurrentSelection.addActionListener(new ActionListener() { 821 public void actionPerformed(ActionEvent e) { 822 Scene.getFilter().load(); 823 } 824 }); 825 826 itemAutoSelection = new JMenuItem("Make Selection with RegExp"); 827 itemAutoSelection.setMnemonic(KeyEvent.VK_A); 828 itemAutoSelection.addActionListener(new ActionListener() { 829 public void actionPerformed(ActionEvent e) { 830 Scene.getFilter().selectWithRegExp(); 831 } 832 }); 833 834 menuSelection.add(itemCurrentSelection); 835 menuSelection.add(itemAutoSelection); 836 } 837 838 public String getSelectionOptions() { 839 String retString = ""; 840 MenuElement[] subItems = null; 841 842 try { 843 subItems = menuSelection.getSubElements()[0].getSubElements(); 844 } catch (ArrayIndexOutOfBoundsException e) { 845 menuSelection.removeAll(); 846 createSelectionMenuItem(); 847 subItems = menuSelection.getSubElements()[0].getSubElements(); 848 } 849 850 for (int i=0; i<subItems.length - 2; i++) { 851 String menuText = ((JCheckBoxMenuItem)subItems[i]).getText(); 852 if (((JCheckBoxMenuItem)(subItems[i])).isSelected()) { 853 if (menuText.indexOf("Entit") != -1) 854 menuText = menuText + " inside box"; 855 retString = retString + "-" + menuText + "\n"; 856 } 857 } 858 859 return retString.length() == 0 ? "Occurred Entities\n" : retString; 860 } 861 862 public void updateDatasourceCombo() { 863 int dsourceId = tblComboDataSource.getSelectedIndex(); 864 865 tblComboDataSource.removeAllItems(); 866 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList(); 867 for (int i=0; i<dmList.size(); i++) { 868 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName()); 869 } 870 tblComboDataSource.setSelectedIndex(dsourceId); 871 refreshToolBar(); 872 } 873 874 public void enableSelectionMenu() { 875 menuSelection.setEnabled(true); 876 createSelectionMenuItem(); 877 } 878 879 public void selectDataSource(int dataSourceId) { 880 tblComboDataSource.setSelectedIndex(dataSourceId); 881 } 882 883 public void updateToolbarButtons() { 884 boolean hasViz = windowList.size() > 0; 885 886 tblVizNow.setEnabled(hasViz); 887 tblConfigure.setEnabled(hasViz); 888 } 889 890 public void refreshToolBar() { 891 int toolbarWidth = 0; 892 893 toolbarPhaseDetector.refresh(); 894 for (int i=0; i<toolbar.getComponents().length; i++) { 895 if (!toolbar.getComponent(i).isVisible()) continue; 896 double width = toolbar.getComponent(i).getPreferredSize().getWidth(); 897 898 if (width < toolbar.getComponent(i).getWidth()) 899 width = toolbar.getComponent(i).getWidth(); 900 901 toolbarWidth += width; 902 } 903 if (toolbarWidth>=Toolkit.getDefaultToolkit().getScreenSize().width-4) { 904 toolbar.setBounds(0,0,frame.getWidth(),60); 905 toolbar.setPreferredSize(new Dimension(frame.getWidth(),60)); 906 } else { 907 toolbar.setPreferredSize(new Dimension(frame.getWidth(),30)); 908 toolbar.setBounds(0,0,frame.getWidth(),30); 909 } 910 toolbar.revalidate(); 911 desktop.revalidate(); 912 913 } 914 915 public void enablePhaseDetectorButton(boolean flag) { 916 toolbarPhaseDetector.enableButton(flag); 917 toolbarPhaseDetector.updateVisualization(false); 918 } 919 920 public void updateFunctionControl(boolean flag) { 921 menuVisualization.setEnabled(flag); 922 menuSelection.setEnabled(flag); 923 tblVizNow.setEnabled(flag); 924 tblConfigure.setEnabled(flag); 925 926 menuFile.setEnabled(flag); 927 menuSelection.setEnabled(flag); 928 menuTool.setEnabled(flag); 929 930 for (int i=0; i<toolbar.getComponents().length; i++) { 931 toolbar.getComponent(i).setEnabled(flag); 932 } 933 toolbarPhaseDetector.enableButton(flag); 934 } 935 936 public PhaseDetectorToolBar getPhaseDetectorToolBar() { 937 return toolbarPhaseDetector; 938 } 939 }